Computer programs that render graphical views of a virtual environment on a computer display are well known. A program that generates a virtual environment, that is, a two- or three-dimensional environment in which a user is free to "move" by control of input devices, for example, is sometimes called a virtual environment application (VEA). VEAs have wide range applications, including the video gaming industry, modeling of natural phenomenon or occurrences such as volcanic activity or oil or chemical spills, or permitting prospective homebuyers or architects to wander through a house before the house is even constructed, for example. The powerful capabilities of VEAs have received considerable attention from software developers and consumers in recent years.
Often, a user has a specific need to display an object that cannot be generalized in an off-the-shelf VEA. There has therefore been considerable effort and numerous attempts in recent years to provide users with "customizable" VEAs. These high-level libraries, toolkits, or applications are used in conjunction with graphic libraries such as OpenGL.RTM. in order to facilitate the creation of custom objects within the VEAs.
Typically, the task of defining the objects that perform in a virtual environment can be divided into two categories. Specifically, one must define the object's appearance (i.e., geometry) and behavior (i.e., position and orientation of the object over time). Typically, object appearance is defined outside of the VEA through the use of a variety of geometric formats such as VRML, DXF, and the 3D Studio.RTM. format, in their corresponding editors. The definition of behavior, however, is more complex as it has no commonly accepted format within the graphics software industry.
One approach to capturing object behavior is to directly code instructions defining the behavior into the VEA. The problem with this approach is that any extension in the set of object behaviors will involve updating the source code of the VEA, a very complex task. An alternative approach is to use relatively complex communication protocols to allow an external application (i.e., simulation engine) to transmit an object's state information to a VEA for rendering in a graphical view. This approach is also problematic because general object behavior tends to be too complex for a description protocol to fully capture it. In addition, VEA and object parser development are complicated by the many required rules of a rich protocol. Accordingly, implementing simple objects is hindered by the large required protocol set and the implementation of complex objects is hindered by limitations in statically defined behaviors.
Additional scenarios exist in which the geometry of virtual objects is driven by behavior. If geometry is altered due to behavior, the updating of the source code or a rich protocol fails to perform adequately. Objects with dynamic geometry (e.g., waving flags, altered ground surfaces, and running water) are typically handled as special cases that end up breaking the code or raising special exceptions in a protocol. It would be desirable to provide a system and method which can define both appearance and behavior of an object separate and apart from object definitions of a graphics application program, to permit a user to define objects rendered in a graphical view without resorting to direct coding of the object in the VEA or a complex communication protocol.